class Gravity
!!!144258.java!!!	init(inout _environment : LocalEnvironment, inout _body : CircleBody) : void
		environment = _environment;
		body = _body;
		currentDivX = Config.WINDOW_SIZE - body.getDiameter() / 2;
		currentDivY = Config.WINDOW_SIZE - body.getDiameter()*2;
!!!144386.java!!!	activate(inout  : Object...params) : Status
		init((LocalEnvironment) params[0], (CircleBody) params[1]);
		
		if(Config.DEBUG == true)
			System.out.println("Le role Gravity est initialisé");
		
		return StatusFactory.ok(this);
!!!144514.java!!!	live() : Status
		run();
		return StatusFactory.ok(this);
!!!144642.java!!!	run() : void
		//Selon l'état dans lequel voyons ce qu'on fait ?
		switch(this.currentState) {
			case I_M_HERE :
				//Reponds à l'agent qui pilote la voiture
				//non implemente pour l'instant
				
				//TODO : modifier ça pour que ce ne soient que les agents de mon groupe qui soient concernés
				broadcastMessage(Follower.class, new GravityMessage());

				//Et ensuite on attends les messages des positives agents :
				this.currentState = State.WAITING_PERCEIVED;
			case WAITING_PERCEIVED :
				//Je reçois la liste des agents que je peux voir :
				this.positiveBodies = getPositiveAgentsPosition();
				this.currentState =  State.MOVING;
			case MOVING :
				move();
				this.currentState = State.I_M_HERE;
		}

		
		
!!!144770.java!!!	getPositiveAgentsPosition() : PointPondere
		//La liste des agents vus :
		List<PointPondere> tmpPositiveBodies = new ArrayList<PointPondere>();
		
		//Listons les agents qui nous ont répondu qu'ils nous voyaient :
		for(Message msg : getMailbox()) {
			if (msg instanceof GravityResponseMessage) {
				//Un positive agent reponds en donnant sa position, on l'ajoute a la liste
				tmpPositiveBodies.add(((GravityResponseMessage) msg).getPoint());
				
			} else {
				//Ici je ne suis pas censé avoir de message, tous les cas devraient être traités
				if(Config.DEBUG == true)
					System.out.println("Un message inatendu vient d'arriver chez un GravityAgent");
			}
		}
		return tmpPositiveBodies;
!!!144898.java!!!	move() : void
		
		Vector2d movement;
		
		movement = computeMasscenter(positiveBodies);
	
		body.setPosition(movement);
		
!!!145026.java!!!	computeMasscenter(inout tmpPositiveBodies : List<PointPondere>) : Vector2d
		//Pour calculer le barycentre, on additionne toutes les ponderations (totalweight)
		//puis pour chaque point, on additionne les positions suivant la formule :
		// poids/totalPoids * vec
		
		Vector2d g = new Vector2d(0,0);
		Vector2d vec;
		double totalweight = 0;
		double weight;
		
		//Calcul du poids total
		for(PointPondere point : tmpPositiveBodies) {
			totalweight += point.getPoids();
		}
		
		//Calcul du barycentre
		for(PointPondere point : tmpPositiveBodies) {

			vec = new Vector2d(point.getPosition());
			vec.scale((point.getPoids()/totalweight));
			g.add(vec);
		}
		
		return g;
		
